﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using ActionLogic;
using BehaviorModel.Block;

namespace BehaviorModel.Statistic
{
    /// <summary>
    /// Describes properties in statistics of whole system.
    /// </summary>
    public interface ISystemStatistic : IUpdatable, IExecutable
    {
        object Locker { get; }

        long CountOfGenerated { get; }

        long CountOfPassed { get; }

        long CountInSystem { get; }

        long CountOfWorkingSC { get; }

        long CountOfRejected { get; }

        long CountOfServiced { get; }

        double RejectProbability { get; }

        double AvgCommonServiceTime { get; }

        double AvgCommonWaitingTime { get; }

        double AvgCommonLiveTime { get; }

        double ServAvgCommonServiceTime { get; }

        double ServAvgCommonWaitingTime { get; }

        double ServAvgCommonLiveTime { get; }

        double RejAvgCommonServiceTime { get; }

        double RejAvgCommonWaitingTime { get; }

        double RejAvgCommonLiveTime { get; }

        Dictionary<Guid, double> AvgQueueLengthByChannels { get; }

        Dictionary<int, double> ServiceChannelsWorkingDistribution { get; }

        Dictionary<int, double> RejectProbabilityHistogramData { get; }

        void UpdateRejectProbabilityHistogramData();

        void UpdateServiceChannelsWorkingDistribution(Guid serviceChannelId, double time, bool isBusy);
    }
}
